ゲームデータのPreloadabilityを考える
概要
特にUnityに限る話ではなく、どんなエンジンで作ろうが言えそうな内容。
こんな仕組み作って使ってみたよ、っていうのを基礎として、俺の考えた最高のPreloadabilityの話をする。
・Client側のプラットフォームがゲームをDLしようと試みる
・データをDLする
・実際に遊べるようになる
っていう動作の間に、ユーザーが実際にその素材を必要とする前に、どこまで何をDLさせるか、っていうのを効率良く制御することを考える。
前提
ある程度は運用スタイルを含んだお話になる。
通信方法については特に指定しない限りはHTTP1系を使う。
また、章の中では動作するサンプルコードを元に話をしていくが、このサンプルコード、特にエラーハンドリングとかは考えてないので、
実際に使ってみてどんな目に合うかは君次第だ!!
Preloadのモチベーション
次のようなモチベーションを掲げておく。
1.最速で遊んでほしい
ユーザーがゲームをDLしてから、すべての素材をDLしてからゲーム開始、、ってやると、無限の時間がかかってしまう。
ムービー流したりいろいろ、、ユーザーの我慢を促進することは出来るっちゃあ出来るんだけど、
「そもそもそのリソースを俺が目にすることがあるのだろうか?」っていう素材を、遊ぶ前にDLさせるのはこう、、なんていうか、、辛いよなっていう。
あとムービーは飛ばすしストーリーはスキップするよな、設定なんかよりカタルシスとかそういうのが欲しいわけだよ(暴言)
2.ユーザーが端末内に持ってる素材をできるだけ少なくしたい
ユーザーの端末内に大量の素材を置いておくことになる、、ので、まずそれをできるだけ小さくしたいよな~っていうのはよくある欲求だとおもう。
3.リリース後はサーバー側からコントロールしたい
ゲームが一度世に出ると、そのあとユーザーの端末と管理側を繋ぐのは通信APIとかだけになる。
ユーザーが保持している素材について、サーバー側が何かできるといいなっていう感じ。
ユーザーが手元で動かすゲーム自体をUpdateする、という方法もある。
個人製作のゲームの場合は主にサーバーを持たないようにしたいな~ってなると思うが、
この章では、「もし機構を最小化できたらどんな感じか」というのを念頭に、そのメリットを書いてみようと思う。
まあ課金機構とかいれようものなら、どこかにサーバ置いて、、ってなっちゃうんだけどさ。
課金に関してはまあ、、AppleとかGoogleにお任せ機構が選べるならそれも良し。
これらが叶えば、ユーザーは常に必要最低限の通信をして、ゲームのプレイができそうだ。
願望が整ったところで、その願望をどのように叶えればいいのか、を書いていく。
っていう記事をUnibook4向けに書いてます。